package cn.com.blueInfo.bpm.person.request;

import cn.com.blueInfo.bpm.common.request.BaseDTO;
import cn.com.blueInfo.bpm.common.request.BaseQueryDTO;
import cn.com.blueInfo.bpm.person.enums.UserIdentityPrimaryOrgFlag;
import cn.com.blueInfo.bpm.person.enums.UserIdentityPrimaryStatus;
import cn.com.blueInfo.bpm.person.enums.UserIdentityStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotNull;
import java.time.LocalDate;

/**
 * 员工身份信息表 接收参数机校验
 * @author suxch
 * @since 2025-08-24 01:39:52
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "员工身份信息 接收参数及校验")
public class UserIdentityDTO extends BaseDTO {

    /** 用户基本信息ID */
    @NotNull(message = "用户基本信息ID 不能为空")
    @Schema(description = "用户基本信息ID")
    private Long userBaseId;
    /** 用户账户信息ID */
    @NotNull(message = "用户账户信息ID 不能为空")
    @Schema(description = "用户账户信息ID")
    private Long userAccountId;
    /** 所属部门ID */
    @NotNull(message = "所属部门ID 不能为空")
    @Schema(description = "所属部门ID")
    private Long orgId;
    /** 职务ID */
    @Schema(description = "职务ID")
    private Long headShipId;
    /** 岗位ID */
    @Schema(description = "岗位ID")
    private Long postId;
    /** 职务状态：1-主职，2-兼职 */
    @Schema(description = "职务状态：1-主职，2-兼职")
    private UserIdentityPrimaryStatus primaryStatus;
    /** 任职开始日期 */
    @NotNull(message = "任职开始日期 不能为空")
    @Schema(description = "任职开始日期")
    private LocalDate startDate;
    /** 任职结束日期 */
    @NotNull(message = "任职结束日期 不能为空")
    @Schema(description = "任职结束日期")
    private LocalDate endDate;
    /** 身份状态：1-有效，0-无效 */
    @NotNull(message = "身份状态 不能为空")
    @Schema(description = "身份状态：1-有效，0-无效")
    private UserIdentityStatus identityStatus;
    /** 主组织标识：1-主要，0-次要 */
    @NotNull(message = "主组织标识 不能为空")
    @Schema(description = "主组织标识：1-主要，0-次要")
    private UserIdentityPrimaryOrgFlag primaryOrgFlag;

    /**
     * 员工身份信息 接收分页查询参数
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "员工身份信息 接收分页查询参数")
    public static class QueryDTO extends BaseQueryDTO {

        /** 用户基本信息ID */
        @Schema(description = "用户基本信息ID")
        private Long userBaseId;
        /** 用户账户信息ID */
        @Schema(description = "用户账户信息ID")
        private Long userAccountId;
        /** 所属部门ID */
        @Schema(description = "所属部门ID")
        private Long orgId;
        /** 职务ID */
        @Schema(description = "职务ID")
        private Long headShipId;
        /** 岗位ID */
        @Schema(description = "岗位ID")
        private Long postId;
        /** 职务状态：1-主职，2-兼职 */
        @Schema(description = "职务状态：1-主职，2-兼职")
        private UserIdentityPrimaryStatus primaryStatus;
        /** 任职开始日期 */
        @Schema(description = "任职开始日期")
        private LocalDate startDate;
        /** 任职结束日期 */
        @Schema(description = "任职结束日期")
        private LocalDate endDate;
        /** 身份状态：1-有效，0-无效 */
        @Schema(description = "身份状态：1-有效，0-无效")
        private UserIdentityStatus identityStatus;
        /** 主组织标识：1-主要，0-次要 */
        @Schema(description = "主组织标识：1-主要，0-次要")
        private UserIdentityPrimaryOrgFlag primaryOrgFlag;

    }

    /**
     * 员工身份信息 接收部分更新参数及校验
     * @author suxch
     * @since 2025-08-21 05:08:55
     */
    @Data
    @EqualsAndHashCode(callSuper = true)
    @Schema(description = "员工身份信息 接收部分更新参数及校验")
    public static class UpdatePartialDTO extends BaseDTO {

        /** 职务ID */
        @Schema(description = "职务ID")
        private Long headShipId;
        /** 岗位ID */
        @Schema(description = "岗位ID")
        private Long postId;
        /** 职务状态：1-主职，2-兼职 */
        @Schema(description = "职务状态：1-主职，2-兼职")
        private UserIdentityPrimaryStatus primaryStatus;

    }

}